iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Software Development

Qt 6 跨平台應用程式開發系列 第 10

D10: 常用元件介紹 QComboBox

  • 分享至 

  • xImage
  •  

昨天我們介紹了圖形元件「文字框 QLineEdit」。今天我們來介紹「下拉選單 QComboBox」

QComboBox

下拉選單也是非常常見的圖形元件。最常見的就是地址選單,選縣市,選鄉鎮。直接從內定的選單去選,可以避免使用者打字手誤。

下面是一個很簡單的使用範例,用 new 創建一個 QComboBox 下拉選單物件之後,可以用 addItem() 添加選單選項,removeItem(int)可以動態移除選項,count()可以獲取 QComboBox 中的選項數量。clear()則是清除所有選項。

值得注意的是,addItem(text, data)可以帶二個參數,第一個參數是選項文字,第二個參數則是附帶的資料,我們下面的範例會解釋這個很有用的特性。

QComboBox* comboBox = new QComboBox;
comboBox->addItem("Item 1");          // 添加選項
comboBox->addItem("Item 2");
comboBox->addItem("Item 3", "Data3"); // 選項可以帶上第二個資料參數

int count = comboBox->count();        // 選項的總數
int index = comboBox->currentIndex(); // 目前選定的選項編號
comboBox->setCurrentIndex(0);         // 選定0號選項

下拉選單最常用的信號是 QComboBox::activated(int index),使用者從下拉選單選了一個選項,就會發出這個信號。

銀行代號查詢

下面我們示範用 QComboBox 寫一個銀行代號查詢程式。

下拉選單中會有五家銀行的名字,選擇了銀行後會顯示三碼轉帳代號。

首先我們用 addItem() 添加選項,第一個參數是顯示的文字:也就是銀行名,第二個參數帶入三碼的銀行代號。

//創建下拉選單,添加選項
QComboBox* comboBox = new QComboBox;
comboBox->addItem("台灣銀行", "004");
comboBox->addItem("土地銀行", "005");
comboBox->addItem("第一銀行", "007");
comboBox->addItem("華南銀行", "008");
comboBox->addItem("中華郵政", "700");

//接著創建一個標籤來顯示郵遞區號查詢結果
QLabel* label = new QLabel;

當使用者操作下拉選單時,我們要連接「選項更動」的信號 QComboBox::activated

跟 comboBox 物件索取當前的選項文字(銀行名稱),可以用 currentText()方法。索取選項附帶的資料(addItem傳入的第二個參數)用 currentData()

需注意,第二個參數的型態是 QVariant ,這是一個可以裝入各種不同型態變數的萬用容器。我們知道銀行代碼是字串型態,所以用 toString() 來轉型。

QObject::connect(comboBox, &QComboBox::activated, [=]
{
    QString bankName = comboBox->currentText();
    QString bankCode = comboBox->currentData().toString();

    label->setText(bankName + "的轉帳代號是" + bankCode);
});

這樣就可以在切換下拉選項時,看到顯示的銀行代號囉!

ComboBox

以下是完整的範例程式

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QComboBox>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;

    QVBoxLayout* layout = new QVBoxLayout;
    w.setLayout(layout);

    //創建下拉選單,添加選項
    QComboBox* comboBox = new QComboBox;
    comboBox->addItem("台灣銀行", "004");
    comboBox->addItem("土地銀行", "005");
    comboBox->addItem("第一銀行", "007");
    comboBox->addItem("華南銀行", "008");
    comboBox->addItem("中華郵政", "700");

    //接著創建一個標籤來顯示郵遞區號查詢結果
    QLabel* label = new QLabel;

    layout->addWidget(label);
    layout->addWidget(comboBox);

    QObject::connect(comboBox, &QComboBox::activated, [=]
    {
        QString bankName = comboBox->currentText();
        QString bankCode = comboBox->currentData().toString();

        label->setText(bankName + "的轉帳代號是" + bankCode);
    });

    w.show();
    return a.exec();
}

上一篇
D09: 常用元件介紹 QLineEdit
下一篇
D11: Qt 物件生命週期淺析
系列文
Qt 6 跨平台應用程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言